require "TimedActions/ISBaseTimedAction"

ISRackAction = ISBaseTimedAction:derive("ISRackAction")

function ISRackAction:isValid()
	return true
end

function ISRackAction:update()
end

function ISRackAction:start()
	self.action:setUseProgressBar(getCore():getOptionRackProgress())
	self.reloadable:rackingStart(self.character, self.square, self.mgr.reloadWeapon)
end

function ISRackAction:stop()
	self.mgr:stopRacking()
	ISBaseTimedAction.stop(self)
end

function ISRackAction:perform()
	self.reloadable:rackingPerform(self.character, self.square, self.reloadWeapon)
	self.mgr:stopRacking()
	-- needed to remove from queue / start next.
	ISBaseTimedAction.perform(self)

	-- reduce weapon's weight by the bullet's
	local ammo = ScriptManager.instance:getItem(self.reloadWeapon:getAmmoType());
	self.reloadWeapon:setActualWeight(self.reloadWeapon:getActualWeight() - ammo:getActualWeight());
end

function ISRackAction:new(reloadManager, char, square, time)
	local o = {}
	setmetatable(o, self)
	self.__index = self
	-- Required fields
	o.character = char
	o.stopOnWalk = false
	o.stopOnRun = false
	o.stopOnAim = false
	o.maxTime = time
	-- Custom fields
	o.mgr = reloadManager
	o.reloadable = reloadManager.reloadable
	o.reloadWeapon = reloadManager.reloadWeapon
	o.square = square
	return o
end


